#ifndef BIB_LINEA_COMANDO_H_
#define BIB_LINEA_COMANDO_H_

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#include <stdint.h>

#include "bib_Log.h"
#include "bib_Socket.h"

#define TAM_MAX_LINEA		60
#define CANT_MAX_PARAMETROS	5

#define CMD_INFO	"info"
#define CMD_CLEAN	"clean"
#define CMD_TRACE	"trace"
#define CMD_SALIR	"salir"

#define ESCRITURA	2
#define PRUEBA		3
#define POSICION	5
#define SALIR		6
#define RTA_ERROR	10

#define TAM_SECTOR 512

typedef struct EST_CHS{	/*Todos tienen un valor minimo de cero para definir una posicion y un valor minimo de uno para definir el tamanio del disco*/
	uint16_t	cilindro;
	uint16_t	cabezal;
	uint16_t	sector;
} EST_CHS;

typedef struct PAYLOAD_ESCRITURA{
	uint32_t	id;
	uint32_t	sector;
	char		buffer[TAM_SECTOR];
} PAYLOAD_ESCRITURA;

typedef struct EST_PEDIDOS{
	uint32_t			id;
	char				tipo;	/*lectura, obtenerTamanioDisco()escritura, prueba*/
	uint32_t			sector;
	int					sock;
	char				*buffer;	/*puntero si es para escritura, NULL para otro*/
	struct EST_PEDIDOS	*siguiente;
} EST_PEDIDOS;

typedef struct EST_PLANIFICACION{
	/*uint16_t	cantSectoresDisco;*/
	uint16_t	tamanioCola;
	uint16_t	cantSectoresRecorridos;
	uint32_t	posicionActual;
	uint32_t	sectorSolicitado;
	double		tiempoConsumido;
	uint32_t	proximoSector;
} EST_PLANIFICACION;

int obtenerTamanioDisco(int sock);

int obtenerComando(char linea[], char *comandoYParametros[]);

int info(int sock, char *comandoYParametros[]);
int clean(int sock, char *comandoYParametros[]);
int trace(int sock, char *comandoYParametros[]);
int salir(int sock, char *comandoYParametros[], char *flagFin);

#endif /* BIB_LINEA_COMANDO_H_ */
